package com.java.wechatservice.controller;

import com.alibaba.fastjson.JSONObject;
import com.java.wechatservice.utils.HttpUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

import java.io.IOException;

@Slf4j
@Controller
public class WXConntroller {
    @Value("${oauth.wx.appId}")
    private String appid;

    @Value("${oauth.wx.appsecret}")
    private String appsecret;

    @Value("${oauth.wx.callback}")
    private String http;

    private String access_Token;
    private String openId;

    /**
     * 微信请求授权地址
     *
     * @return 返回
     */
    @GetMapping("/")
    public String wxlogin() {
        // 第一步：用户同意授权，获取code
        String url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + appid +
                "&redirect_uri=" + http +
                "&response_type=code" +
                "&scope=snsapi_userinfo" +
                "&state=STATE#wechat_redirect";
        return "redirect:" + url;
    }


    /**
     * 微信登录回调地址
     *
     * @param code  code
     * @param state z状态
     * @return 返回
     * @throws IOException 异常
     */
    @GetMapping("/wxcallback")
    public String wxcallback(String code, String state) throws IOException {
        log.info("code:{}", code);
        // 第二步：通过code换取网页授权access_token
        String url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" + appid +
                "&secret=" + appsecret +
                "&code=" + code +
                "&grant_type=authorization_code";
        JSONObject jsonObject = HttpUtils.get(url);

        openId = jsonObject.getString("openid");
        log.info("openId:{}", openId);
        //一般来说，微信登陆到这里获取openid就可以；了
        /**
         * 然后根据个人的openId生成token返回信息
         */


        access_Token = jsonObject.getString("access_token");

//        System.out.println("access_Token"+access_Token);
        log.info("access_Token:{}", access_Token);
        // 第四步：拉取用户信息(需scope为 snsapi_userinfo)
        url = "https://api.weixin.qq.com/sns/userinfo?access_token=" + access_Token +
                "&openid=" + openId +
                "&lang=zh_CN";
        JSONObject userInfoJson = HttpUtils.get(url);
        System.out.println("UserInfo:" + userInfoJson);


        // 微信帐号做来一个关联，来关联我们的账号体系
        // 此处实现自己的保存用户信息逻辑
//        return "redirect:/gohome?openid=" + openId;
        return openId;
    }
//    @GetMapping("/gohome")
//    public String gohome(String openid, ModelMap map) {
//        WXUser userEntity = wxUserService.getModel(openid);
//        if (StringUtils.isEmpty(userEntity.getPhone())) {
//            return "redirect:/register?openid=" + openid; // 重定向到注册接口
//        } else {
//            map.put("openid", openid);
//            return "/home";  // 打开首页
//        }
//    }
//    @GetMapping("/register")
//    public String register(String openid, ModelMap map) {
//        map.put("openid", openid);
//        return "/upload";  // 我这里是打开上传页面，可根据自己业务需要实际来跳转
//    }
//    @GetMapping("/success")
//    public String register() {
//        return "/success";  // 打开注册成功页面
//    }
}
